package com.tmxk.days01.demo3_pets_wmh;

import java.util.Random;

/**
 * static 使用场景 : 数据共享时使用
 *
 * 需求: 电影买票, 总共 100张, 用户买票,根据票量需求, A 买 2张, B买5张, ...,当100张票卖结束,系统就不卖了;
 * 针对 100 张票进行数据共享
 *
 *
 */
public class StaticDemo {
    // 定义了一个共享电影票变量
    public static int tickets = 100;

    /**
     * 售票方法
     */
    public String sellTicket(String name, int num) {
        String message = "";
        for (int i = 1; i <= num; i++) {
            if (tickets == 0) {
                message = "不好意思,票已卖结束";
                return message;
            } else {
                tickets--;
                message = name + "买了" + i + "张表,剩余" + tickets + "张";
            }
            System.out.println("message:" + message);
        }
        //testMain();
        return message;
    }

    public static void testMain() {
        System.out.println("静态方法测试");
    }

    /**
     * 同一个类中,静态方法中不能直接调用非静态方法,可通过 实例对象名.方法名()调用;
     * 同一个类中,静态方法和静态方法可直接调用;
     * 同一个类中,非静态方法中能直接调用静态成员(静态属性、静态方法)
     * <p>
     * 不同类中,静态方法中不能直接调用非静态方法,可通过 实例对象名.方法名()调用;
     * 不同类中,静态方法和静态方法通过 类名.静态方法(); or 实例对象名.静态方法名()调用;(不推荐用)
     * 不同类中,非静态方法中能直接调用 类名. 静态成员(静态属性、静态方法) or 实例对象名.静态成员 调用;(不推荐用)
     *
     * @throws InterruptedException
     */
    // main 主线程
    public static void main(String[] args) throws InterruptedException {
        StaticDemo sd = new StaticDemo();
        for (int i = 1; i < 50; i++) {
            Random ran = new Random();
            String mes = sd.sellTicket("张三" + i, ran.nextInt(20));
            // 休眠2s
            Thread.sleep(2000);
            System.out.println(mes + "\n");
        }
    }
}